/* 
 * artist style definition
 *
 * Choi Jonghwan<saxboy@gmail.com>
 * 2006/04/23
 */

#ifndef __ARTISTSTYLE_H__
#define __ARTISTSTYLE_H__

#include "note.h"
#include "chord.h"
#include "song.h"
#include "pattern.h"

#define MAX_PATTERNS_PER_STYLE		10

typedef struct __artist_style {

	char name[32]; 

	/* artist type:
	 * drummer or soloist or accompanist or melodist 
	 */


	/* patterns list */
	int pattern_count; 
	PATTERN patterns[MAX_PATTERNS_PER_STYLE]; 

	/* creativity, huh ;-) */

} _ARTISTSTYLE; 

typedef _ARTISTSTYLE *ARTISTSTYLE; 

ARTISTSTYLE artiststyle_New(void); 
ARTISTSTYLE artiststyle_NewWithStyle(const char *name); 
int artiststyle_Delete(ARTISTSTYLE as); 
int artiststyle_Load(ARTISTSTYLE as, const char *name); 
int artiststyle_AddPattern(ARTISTSTYLE as, PATTERN p); 


const PATTERN artiststyle_SelectPattern(ARTISTSTYLE as, CHORD c, int note_length); 


int artiststyle_ApplyStyleForSong(ARTISTSTYLE as, SONG s, VOICE v); 
int artiststyle_ApplyStyleForBar(ARTISTSTYLE as, BAR b, VOICE v); 
int artiststyle_ApplyStyleForChord(ARTISTSTYLE as, CHORD c, int note_length, VOICE v); 
#endif /* __ARTISTSTYLE_H__ */
